package main

import (
	"fmt"
	"runtime"
)

/*
go语言通过goroutine实现并发，goroutine是一种协程，相当于更轻量级的线程，避免了线程的上下文切换消耗
goroutine可以运行在一个或多个线程上

go语言的并发设计理念：
不要通过共享来通信，而要通过通信来共享
*/
func say(s string) {
	for i := 0; i < 5; i++ {
		runtime.Gosched() //表示让出CPU时间片，下次某个时候继续恢复执行该goroutine
		fmt.Println(s)
	}
}

func main() {
	go say("world") //开启一个新的goroutine执行say函数
	say("hello")
}
